package pl.grabar.clinic.core.dao;

import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.QueryParam;


/**
 * Generyczna usługa umożliwiająca podstawowe operacje na obiektach dziedziny.
 * 
 * @author db
 * @param <T>
 */
public interface CrudService<T> {

	void create(T t);

	T get(String id);

	void update(T t);

	void delete(T t);

	@POST
	@Path("/list")
	List<T> getList(@QueryParam("pageNumber") Integer pageNumber, @QueryParam("pageSize") Integer pageSize,
			@QueryParam("sortProperty") String sortProperty, @QueryParam("sortOrder") String sortOrder);

	@GET
	@Path("/listAll")
	List<T> getList();

	@POST
	@Path("/count")
	Long count(T t);

}
